`
https://leetcode.cn/problems/path-in-zigzag-labelled-binary-tree/
`

/**
 * @param {number} label
 * @return {number[]}
 */
var pathInZigZagTree = function (label) {
  const path = [];
  while (label >= 1) {
    path.push(label)
    label = Math.floor(label / 2)

    // 计算出当前 label 所在的深度
    const depth = Math.floor(Math.log2(label))
    // 算出当前深度所在层的最大最小值 [min, max]
    const range = getLevelRange(depth)
    // 由于之字形分布，根据上层的节点取值范围，修正父节点
    label = range[1] - (label - range[0])
  }
  // 反转成从根节点到目标节点的路径
  path.reverse()
  return path
};

// 获取第 n 层节点的取值范围
function getLevelRange(n) {
  let p = Math.pow(2, n);
  return [p, 2 * p - 1];
}